<?php

namespace app\common\model\Subject;

use think\Model;
use think\Request;

// 软删除的模型
use traits\model\SoftDelete;

class Subject extends Model
{
    //继承软删除
    use SoftDelete;

    //模型对应的是哪张表
    protected $name = "subject";

    //指定一个自动设置的时间字段
    //开启自动写入
    protected $autoWriteTimestamp = true; 

    //设置字段的名字
    protected $createTime = "createtime"; //插入的时候设置的字段名

    //禁止 写入的时间字段
    protected $updateTime = false;

    // 软删除的字段
    protected $deleteTime = 'deletetime';

    //自动过滤掉不存在的字段
    protected $field = true;

    // 追加属性(即追加一个虚拟字段，实际在数据表中并不存在)
    //且追加的虚拟字段不能与数据表中已存在的字段重复
    protected $append = [
        'thumbs_text',
        'likes_text',
        'createtime_text'
    ];

    public function getCreatetimeTextAttr($value,$data)
    {
        //获取数据
        $createtime = isset($data['createtime']) ? trim($data['createtime']) : '';

        if(empty($createtime))
        {
            return '暂无上架时间';
        }

        return date("Y-m-d",$createtime);
    }

    public function getThumbsTextAttr($value,$data)
    {   
         //获取域名部分
         $domain = Request::instance()->domain();
         $domain = trim($domain, '/');

        //获取图片
        $thumbs = isset($data['thumbs']) ? $data['thumbs'] : '';

        //若课程图片为空或课程图片地址不存在
        //则设置为默认图片
        if(empty($thumbs) || !is_file(".".$thumbs))
        {
            $thumbs = "/assets/img/video.jpg";
        }

        return  $domain.$thumbs;
    }

    public function getLikesTextAttr($value,$data)
    {
        //$data 表示当前需要进行操作的一整条的数据
        $likes = isset($data['likes']) ? trim($data['likes']): '' ;

        if(empty($likes))
        {
            return 0;
        }

        //获得的点赞字符串转换成数组结构
        $arr = explode(',',$likes);
        return count($arr);
    }

    public function category()
    {   
        // $this 指的是当前的模型
        // belongsTo 指的是需要关联查询的模型 ，在belongsTo中分别给出模型的地址、外键和主键的成立条件
        // setEagerlyType指的是用join还是in方法查询 0代表join，链表查询；1代表in，列表查询
        return $this->belongsTo('app\common\model\Subject\Category', 'cateid', 'id', [], 'LEFT')->setEagerlyType(0);
    }

    //关联查询
    public function teacher()
    {   
        //setEagerlyType(0);代表使用Join查询
        //setEagerlyType(1);代表用In查询
        //第一个参数指关联的模型路径
        //第二个参数指关联模型对应的数据表的外键
        //第三个参数指第二个参数的外键与自身的哪个字段进行关联
        return $this->belongsTo('app\common\model\Teacher\Teacher','teacherid','id',[],'LEFT')->setEagerlyType(0);
    }
}
